//1. 创建一个zookeeper的客户端
const zookeeper = require('zookeeper-cluster-client');
const client = zookeeper.createClient('localhost:2181');
const path = process.argv[2];

async function listChildren(client, path) {
	const children = await client.getChildren(
		path,
		event => {
			console.log('Got watcher event: %s', event);
			listChildren(client, path);
		});
	console.log('Children of %s are: %j.', path, children);
}

client.once('connected', () => {
	console.log('Connected to ZooKeeper.');
	//2列出，某个节点下的所有子节点
	listChildren(client, path);

	//获取某个节点的值
	client.getData('/node_1').then(function(value) {
		console.log('/node_1：', value.toString('utf8'));
	});



	//监听某个节点
	client.watch('/node_1', (err, data, stat) => {

		if (err) {
			//handler error
			return;
		}

		console.log('data => %s', data.toString());
		console.log('stat => %s', stat);

	});


	//监听某个节点下的所有子节点
	client.watchChildren('/node_1', (err, children, stat) => {

		if (err) {
			// handle error
			return;
		}
		console.log('children => %j', children);
		console.log('stat => %s', stat);

	});


	//获取客户端的sessionID
	console.log('该client的sessionID为:',client.getSessionId().toString('utf8'));

	//创建一个只读的持久化节点
	//
	client.create('/node_2','hahahaha','r','PERSISTENT').then(function(result){
		console.log('创建节点的callback结果:',result)
	});

});


//启动 app.js列出一个已经存在的节点下的所有子节点,zookeeper中已经存在的节点为 /node_1
//
//
//acl权限是zookeepeer用来控制客户端对其节点的操作权限
//权限有五个
// CREATE：表示创建子节点的权限
// READ：表示获取节点数据和子节点列表的权限
// WRITE：表示更新节点数据的权限
// DELETE：表示删除子节点的权限
// ADMIN：表示设置节点ACL的权限
// 
// zookeeper四种类型的节点分别为
// 
// PERSISTENT                持久化节点
    
// PERSISTENT_SEQUENTIAL     顺序自动编号持久化节点，这种节点会根据当前已存在的节点数自动加 1
    
// EPHEMERAL                 临时节点， 客户端session超时这类节点就会被自动删除
   
// EPHEMERAL_SEQUENTIAL      临时自动编号节点